package com.ftg.learn.framework.mybatis.chapter01;

import com.ftg.learn.framework.mybatis.chapter01.entity.TeacherEntity;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;
import java.util.Map;

/**
 * 描述     映射器类文件
 * <p>
 * 今天开始学习框架  ： xmind发群里 mybatis
 * <p>
 * 八股文 ：
 * 1. 框架是什么？
 * 1.1 作用、场景（java-db）
 * <p>
 * 2 mybatis 作用是什么？
 * <p>
 * 2.1 开发模式有哪种？ 1（xml） 2(接口+注解) 3 (javabase)
 * <p>
 * 2.2 工作流程？
 * <p>
 * 2.3 缓存机制？
 * <p>
 * 3 开发级别
 * 3.1 完成相应的crud
 * 3.1.1 单表的注解、xml开发模式
 * 3.1.2 多表,联表如何操作?
 * <p>
 * 3.2 复杂操作，方法操作如果为一个对象如何 处理
 * <p>
 * 4 :  下次
 * 工作流程？
 * <p>
 * 缓存机制？
 * <p>
 * 级联操作?
 *  给一个业务线 ： mybatis分析业务线，通过分层
 * 用来操作mysql
 *
 * @author 布衣
 * @date 2024/10/31
 */
@SuppressWarnings("all")
public interface DemoMapper {

    /**
     * 完成全表查询的
     *
     * @return
     */
    List<Map<String, Object>> list();

    /**
     * 使用注解开发模式
     *
     * @param tname 名称
     * @return
     */
    List<Map<String, Object>> listByParameter(@Param("tname") String tname);

    /**
     * 使用注解开发模式
     *
     * @param tname 名称
     * @return
     */
    List<TeacherEntity> listByParameter2(Map<String,String> map);

    //注解开发模式
    @Select("select * from teacher where tname = #{tname}")
    List<Map<String, Object>> listByParameter1(@Param("tname") String tname);

    @Insert("insert into teacher(tno,tname) values(#{t.tno},#{t.tname})")
    int insert(@Param("t")TeacherEntity t);

    @Update("update teacher set tno = #{t.tno} , tname = #{t.tname} where tno = #{tno}")
    int modify(@Param("t")TeacherEntity t,@Param("tno") Integer tno);

}
